#pragma once
#include "stdafx.h"
#include "types.h"
typedef union {
  u8 *bank;
  u16 Mask;
} BankData;
typedef union {
  struct {
        u8 B1, B0;
  } B;
  short W;
} BigData;
class Memory
{
public:
        Memory(void);
        ~Memory(void);
        u8 Read_memory_8(u16 address);
        u16 Read_memory_16(u16 address);
        void Write_memory_8(u16 address, u8 value);
        void Write_memory_16(u16 address, u16 value);
        bool check_bank(u16 address,u16 from,u16 to);
        BankData get_bank(u16 address);
private:
        u8 RomBank0[0x4000];			// 0x0000 - 0x4000
        u8 SwitchableRomBank[0x4000];		// 0x4000 - 0x8000
        u8 VRAM[0x2000];			// 0x8000 - 0xA000
        u8 SwitchableRamBank[0x2000];		// 0xA000 - 0xC000
        u8 InternalRam[0x2000];			// 0xC000 - 0xE000
        u8 OAM[0x1E00];				// 0xE000 - 0xFE00
        u8 Empty[0xFF];				// 0xFE00 - 0xFF00
        u8 IO[0x80];				// 0xFF00 - 0xFF80
        u8 Ram[0x7E];				// 0xFF80 - 0xFFFE
        u8 InterruptRegister;			// 0xFFFF

};
